package main

import (
	"fmt"
	"time"
)

// 课后练习
//•基于Channel编写一个简单的单线程生产者消费者模型
//•队列：队列长度10，队列元素类型为int
//•生产者：每1秒往队列中放入一个类型为int的元素，队列满时生产者可以阻塞
//•消费者：每一秒从队列中获取一个元素并打印，队列为空时消费者阻塞

// 队列
var mq = make(chan int, 10)

// 消费者
func consumer() {
	for {
		select {
		case i := <-mq:
			fmt.Println("消费消息", i)
			time.Sleep(time.Second)
		default:
			fmt.Println("消息队列为空")
			time.Sleep(time.Second * 2)
		}
	}
}

// 生产者
func producer() {
	for i := 1; i < 11; i++ {
		fmt.Println("生产消息：", i)
		mq <- i
		time.Sleep(time.Second)
	}
}

func main() {
	go producer()
	consumer()
}
